﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using ProcelNasEscolas.Model.Fichas;
using ProcelNasEscolas.Model.Interfaces;
using ProcelNasEscolas.Model.Respostas;
using ProcelNasEscolas.Model;

namespace ProcelNasEscolas.Data
{
    public class EscolaDao : AbstractCrudDao<EscolaData>, IEscolaDao 
    {
        public Escola ToModelObject(EscolaData escolaData)
        {
            Escola escolaModel = new Escola();
            escolaModel.DataDePreenchimento = escolaData.DataDePreenchimento;
            escolaModel.Diretor = escolaData.Diretor;
            escolaModel.Endereço = escolaData.Endereco;
            escolaModel.HoraFimExpediente = escolaData.HoraFimExpediente;
            escolaModel.HoraInicioExpediente = escolaData.HoraInicioExpediente;
            escolaModel.Id = escolaData.Id;
            escolaModel.Nome = escolaData.Nome;
            escolaModel.NomeContatoProcel = escolaData.NomeContatoProcel;
            escolaModel.Telefone = escolaData.Telefone;
            escolaModel.TelefoneContatoProcel = escolaData.TelefoneContatoProcel;

            return escolaModel;
        }

        public EscolaData CreateOrUpdate(Escola escolaModel)
        {
            try
            {
                EscolaData escolaData = new EscolaData();
                
                IList<EscolaData> escolas = this.GetObjectContext().IEntidadeDataSet.OfType<EscolaData>().Where(escola => escola.Id == escolaModel.Id).ToList();

                if (escolas.Count == 0)
                {
                    this.Add("IEntidadeDataSet", escolaData);
                }
                else
                {
                    escolaData = escolas.First();
                }
           
                escolaData.DataDePreenchimento = escolaModel.DataDePreenchimento;
                escolaData.Diretor = escolaModel.Diretor;
                escolaData.Endereco = escolaModel.Endereço;
                escolaData.HoraFimExpediente = escolaModel.HoraFimExpediente;
                escolaData.HoraInicioExpediente = escolaModel.HoraInicioExpediente;
                escolaData.Nome = escolaModel.Nome;
                escolaData.NomeContatoProcel = escolaModel.NomeContatoProcel;
                escolaData.Telefone = escolaModel.Telefone;
                escolaData.TelefoneContatoProcel = escolaModel.TelefoneContatoProcel;
                this.SaveChanges();

                return escolaData;
            }
            catch (Exception e)
            {
                System.Console.Out.WriteLine("" + e);
                return null;
            }
        }

        public Escola GetEscola(int Id)
        {
            try
            {
                IList<EscolaData> result = this.GetObjectContext().IEntidadeDataSet.OfType<EscolaData>().Where(c => c.Id == Id).ToList();

                return this.ToModelObject(result.First());
            }
            catch (Exception e)
            {
                System.Console.Out.WriteLine("" + e);
                return null;
            }
        }

        public IList<Escola> GetAll()
        {
            IList<EscolaData> result = this.GetObjectContext().IEntidadeDataSet.OfType<EscolaData>()
                 .ToList();
            IList<Escola> escolas = new List<Escola>();

            foreach (EscolaData escola in result)
            {
                escolas.Add(this.ToModelObject(escola));
            }

            return escolas;
        }
    }
}
